package subraSoft.centaurus.gui.option.amb;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import subraSoft.centaurus.model.cobj.CenDefaultCObj;

/**
 * Modelo generico para las tablas de la ABM. // TODO GENERICO TOTAL?
 * 
 * @author christian
 *
 */
public abstract class CenTableModel extends AbstractTableModel
{
	private static final long serialVersionUID = 1L;
	
	private List<CenDefaultCObj> dataProvider;
	
	/**
	 * Constructor.
	 */
	public CenTableModel()
	{	
		dataProvider = new ArrayList<CenDefaultCObj>();
	}

	public int getRowCount() 
	{
		return dataProvider.size();
	}
	
	/**
	 * Borra el elemento de la tabla (no relaiza el borrado en el modelo).
	 * 
	 * @param rowToDelete indice de el elemento a borrar.
	 */
	public void deleteRow(int rowToDelete)
	{
		dataProvider.remove(rowToDelete);
		fireTableRowsDeleted(rowToDelete,rowToDelete);
	}
	
	/**
	 * Borra el elemento de la tabla (no relaiza el insert en el modelo).
	 * 
	 * @param element elemento a agregar en la tabla.
	 */
	public void addRow(CenDefaultCObj element)
	{
		dataProvider.add(0, element);
		fireTableRowsInserted(0,0);
	}
	
	/**
	 * Obtiene el objeto del indice pasado como parametro.
	 * 
	 * @param index indice del elemento requerido
	 * @return el elemento en el indice dado
	 */
	public CenDefaultCObj getObject(int index)
	{
		return dataProvider.get(index);
	}
	
	/**
	 * Actualiza el elemento en la tabla (todos sus campos).
	 * 
	 * @param elemento intercambia el elemento del inicide pasado por este nuevo elemento.
	 * @param row indice de la fila a actualizar.
	 */
	public void updateRow(CenDefaultCObj elemento, int row)
	{
		dataProvider.remove(row);
		dataProvider.add(row, elemento);
		fireTableRowsUpdated(row,row);
	}

	/**
	 * Obtiene la lista de elementos de la tabla.
	 * 
	 * @return la lista de elementos de la tabla.
	 */
	public List<CenDefaultCObj> getDataProvider() {
		return dataProvider;
	}

	/**
	 * Setea la lista de elementos en la tabla.
	 * 
	 * @param dataProvider la lista de elementos a setear.
	 */
	public void setDataProvider(List<CenDefaultCObj> dataProvider) {
		this.dataProvider = dataProvider;
		fireTableDataChanged();
	}	
}
